import globals from 'globals';
import pluginJs from '@eslint/js';
import pluginVue from 'eslint-plugin-vue';
import vueParser from 'vue-eslint-parser';
import pluginTs from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';

/** @type {import('eslint').ESLint.ConfigData[]} */
export default [
  {
    ignores: [
      '**/node_modules/**', // 忽略 node_modules
      '**/dist/**', // 忽略 dist 目录
      '**/assets/**', // 忽略 assets 目录
      '*.js', // 忽略纯 JavaScript 文件
      'vite.config.ts',
    ],
  },
  pluginJs.configs.recommended,
  {
    files: ['**/*.ts', '**/*.tsx', '**/*.vue', ".vitepress/**/*.ts", ".vitepress/**/*.vue"], // 为 TypeScript 和 Vue 文件配置规则 默认.开头的目录会被忽略
    languageOptions: {
      globals: {
        ...globals.browser, // 使用浏览器环境的全局变量
        // AnyObj: 'readonly', // AnyObj 全局的ts 类型
        process: 'readonly', // Nodejs
      },
      parser: vueParser, // 使用 vue-eslint-parser 来解析 Vue 文件
      parserOptions: {
        parser: tsParser, // 使用 TypeScript 解析器来解析 Vue 中的 TypeScript 代码
        projectService: {
					defaultProject: './tsconfig.json',
          allowDefaultProject: ['eslint.config.mjs']
        },
        extraFileExtensions: ['.vue'], // 添加 .vue 文件扩展名
        project: ['./tsconfig.json'], // 使用项目的 tsconfig 文件
      },
    },
    plugins: {
      '@typescript-eslint': pluginTs, // 启用 TypeScript 插件
      vue: pluginVue, // 启用 Vue 插件
    },
    rules: {
      ...pluginTs.configs.recommended.rules,
      ...pluginTs.configs['recommended-type-checked'].rules,
      ...pluginVue.configs['vue3-essential'].rules,
      'vue/multi-word-component-names': 'off',
      'no-shadow': 'error',
      semi: 'error',
      '@typescript-eslint/no-unused-expressions': 'off',
      '@typescript-eslint/no-floating-promises': 'off',
      "no-redeclare": "off",
      "@typescript-eslint/no-redeclare": "error",
      "@typescript-eslint/unbound-method": 'off',
    },
  },
];
